define(function(require, exports, module) {
  var $ = require("$");
  var dtUtil = require('datatableutil');
  require("bootstrap_commonrequire");
  require('select2.css');
  require('select2');
  require('highcharts');
  require('highcharts.exporting');
  var store = require('store');
  var loader = require("./loader/loader");
  require('bootstrap_datetimepicker');
  require("bootstrap-datetimepicker.min.css");
//  require('bootstrap_datetimepicker.zh-CN');
  

  exports.init = function(param) {

    $(document).ready(
        function() {
          var startTimeSelect = "";
          // 蒙版
          loader.loading("数据加载中，请稍后……");
          // 加载自定义模板-条件区域
          var isSystemAdmin = (store.get("userInfo").userType == -1);
          var tplattrs = {};
          tplattrs.isSystemAdmin = isSystemAdmin;

          var template = require("./countdayvisits.tpl");
          var Widget = require("widget");
          var Component = Widget.extend({
            template : template
          });

          // 图表区
          // 将查询出来的内容赋值给图表区
          var dataChart = {};

          new Component({
            attrs : tplattrs,
            renderTo : queryAreaId
          });

          // 获取查询条件
          function getCondition() {

            var isvid = $('#isvName').val();

            var applyid = $('#applyName').val();

            // 企业名称
            var carrierid = $('#carrierid').val();
            
            // datetimepicker获取的时间
            var mydatetimepicker = $("#mydtp_input2").val();

            var queryStr = "";
            if (carrierid != '' && carrierid != null) {
              queryStr += ("tm.company_id=" + carrierid + ";");
            }

            if (isvid != '' && isvid != null) {
              queryStr += ("tm.isv_id=" + isvid + ";");
            }

            if (applyid != '' && applyid != null) {
              queryStr += ("tm.app_id=" + applyid + ";");
            }
            
            if (mydatetimepicker != '' && mydatetimepicker != null) {
              startTimeSelect = mydatetimepicker;
              queryStr += ("tm.create_time BETWEEN '" + mydatetimepicker + " 00:00:00' AND '" + mydatetimepicker + " 23:59:59'" + ";");
            }

            return queryStr;
          }

          // 绑定企业名称下拉列表
          $("#ddlCarrierid").select2({
            placeholder : "企业名称",
            allowClear : true,
            formatNoMatches : "没有匹配的企业",
            ajax : {
              url : GLOBAL.URL.ADMIN_GETCARRIEROPTIONS,
              dataType : 'json',
              delay : 250,
              data : function(term, pageNo) {
                return {
                  q : " c.name like '%" + term + "%' ", // search term
                  appid : $("#applyName").val(),
                  size : 25,
                  start : (pageNo - 1) * 25
                };
              },
              results : function(data, pageNo) {
                var dataObj = eval(data);
                return {
                  results : dataObj
                };
              },
              cache : true
            }
          });

          // 绑定isv名称下拉列表
          $.ajax({
            type : "POST",
            dataType : "json",
            url : "/user/queryIsv.do",// GLOBAL.URL.ADMIN_GETCARRIEROPTIONS,//
                                          // wp.huang
            async : false,
            success : function(data) {
              $("#isvName").select2({
                placeholder : "ISV名称",
                allowClear : true,
                data : data
              });
            },
            error : function(data) {
              bootbox.alertTimeout('初始化ISV名称数据失败！');
            }
          });

          // 绑定应用下拉列表
          $.ajax({
            type : "POST",
            dataType : "json",
            url : "/condition/applyName.do",// /GLOBAL.URL.GETAPPLYTYPELIST,
                                            // ////wp.huang
            async : false,
            // data: "isvid="+$('#isvName').val(),

            success : function(data) {
              $("#applyName").select2({
                placeholder : "应用名称",
                allowClear : true,
                data : data
              });
            },
            error : function(data) {
              bootbox.alertTimeout('初始化应用名称数据失败！');
            }
          });

          // 统计方式
          var typeList = [ {
            "id" : "5",
            "text" : "5分钟"
          }, {
            "id" : "10",
            "text" : "10分钟"
          }, {
            "id" : "30",
            "text" : "30分钟"
          }, {
            "id" : "60",
            "text" : "1小时"
          } ];
          $('#statisticstype').select2({
            placeholder : "统计周期",
            allowClear : true,
            data : typeList
          });

          $("#carrierid").select2({
            placeholder : "企业名称",
            allowClear : true,
            ajax : {
              url : GLOBAL.URL.ADMIN_GETCARRIEROPTIONS,
              dataType : 'json',
              delay : 250,
              data : function(term, pageNo) {
                return {
                  q : " c.name like '%" + term + "%' ", // search term
                  size : 25,
                  start : (pageNo - 1) * 25
                };
              },
              results : function(data, pageNo) {
                var dataObj = eval(data);
                return {
                  results : dataObj
                };
              },
              cache : true
            }
          });

          // 自定义日期控件
          $('#mydatetimepicker').datetimepicker({
            format: 'yyyy-MM-dd',
            language: 'zh-CN',
            pickDate: true,
            pickTime: false,
            hourStep: 1,
            minuteStep: 15,
            secondStep: 30,
            inputMask: true
          });
          $('#mydatetimepicker').datetimepicker('setDate', (new Date()));
          

          // 加载表单模板和数据
          var Table = require("table");
          new Table({
            attrs : {
              id : "datatableid",
              isHovered : false,
              isStriped : true,
              isBordered : false
            },
            renderTo : param.divWrapperId
          });

          var datatables = $('#datatableid').dataTable(
              {
                "sDom" : "<'hidden'<'span6'l><'hidden'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
                "bJQueryUI" : false,
                "oLanguage" : {
                  "sUrl" : "/business/js/common/table/src/lang/dataTable.cn.txt"
                },
                "sPaginationType" : "bootstrap", // 分页自带两种样式，full_numbers和two_button(默认)
                'bPaginate' : true, // 是否分页
                "bProcessing" : true, // 当datatable获取数据时候是否显示正在处理提示信息。
                "bServerSide" : true, // 指定服务器端分页
                "bDeferRender" : true,
                "bFilter" : true,
                "bSort" : true,
                "bInfo" : true,
                "sAjaxSource" : "/visits/countDayVisits.do", // 数据源
                "iDisplayLength" : DATATABLES_CONFIG.iDisplayLength.DEFAULT, // 默认分页的每页记录数
                "fnServerData" : function(sSource, aoData, fnCallback, oSettings) {
                  var queryparam = dtUtil.convert_aoData(aoData);

                  // 拼接where查询条件
                  var cond = getCondition();
                  if (cond != '' && cond != null) {
                    queryparam.q += cond;
                  }
                  queryparam.startTime = startTimeSelect;

                  // 添加自己的额外参数
                  oSettings.jqXHR = $
                      .ajax({
                        "dataType" : 'json',
                        "contentType" : "application/json;charset=UTF-8",
                        "type" : "GET",
                        "url" : sSource,
                        "data" : queryparam, // 将请求数据转换为后台要求的JSON格式
                        "success" : function(json) {
                          // 隐藏蒙版
                          loader.noloading();
                          dtUtil.successCallback(json, aoData, fnCallback);
                          dataChart = json;
                          // 获取拼接成json串
                          var jsondata = dataChart.data;
                          // 获取data中的items属性
                          var items = jsondata.items;

                          var strTime = [];// 获取时间
                          var strCount = [];// 获取数量
                          var strCountByTime = [];// 通过时间计算
                          var selectTime = $('#statisticstype').val();// 选择的时间，字符串型
                          var selectTimeInt = parseInt(selectTime);// 选择的时间，整型
                          var pointIntervalCount = 5 * 60 * 1000;// X轴的最小刻度
                          var sum = 0;// 每5/10/30/60个求和

                          // 格式化数据
                          if (selectTimeInt == 5 || selectTimeInt == 10 || selectTimeInt == 30 || selectTimeInt == 60) {
                            strCountByTime.push(0);
                            for ( var i = 0; i < items.length; i++) {
                              var bean = items[i];
                              sum += bean.count;
                              if (i % selectTimeInt == (selectTimeInt - 1)) {
                                strCountByTime.push(sum);
                                sum = 0;
                              } else if (i == items.length - 1) {
                                strCountByTime.push(sum);
                              }
                              // 获取strTime这个时间没用，因为只用修改X轴的最小刻度pointIntervalCount即可
                              // strTime.push(bean.time);
                            }
                            strCount = strCountByTime;
                            pointIntervalCount = selectTimeInt * 60 * 1000;
                          } else {
                            strCountByTime.push(0);
                            for ( var i = 0; i < items.length; i++) {
                              var bean = items[i];
                              sum += bean.count;
                              if (i % 5 == (5 - 1)) {
                                strCountByTime.push(sum);
                                sum = 0;
                              } else if (i == items.length - 1) {
                                strCountByTime.push(sum);
                              }
                            }
                            strCount = strCountByTime;
                            pointIntervalCount = 5 * 60 * 1000;
                          }

                          // 格式化series的UTC数据，分别获取年月日
                          var strDate = startTimeSelect;
                          var strYear = strDate.substring(0, 4);
                          var strMonth = parseInt(strDate.substring(6, 7)) - 1;
                          var strDay = strDate.substring(8, 10);

                          new Highcharts.Chart(
                              {
                                chart : {
                                  renderTo : 'container1',
                                  zoomType : 'x',
                                  //让放大的动画平滑些
                                  animation: Highcharts.svg
                                },
                                title : {
                                  text : '统计图表：' + startTimeSelect
                                },
                                xAxis : {
                                  type : 'datetime',
                                  labels : {
                                    style : {
                                      // 'color': 'red',//刻度颜色
                                      'fontSize' : '14px' // 刻度字体大小
                                    },
                                    // 控制x轴格式输出为00:00~第二天的00:00
                                    formatter: function () {  
                                      return Highcharts.dateFormat('%H:%M', this.value);  
                                    }
                                  },
                                  // 一小时的统计
                                  // minRange : 3600 * 1000
                                },
                                yAxis : {
                                  min : 0,// 不显示负数
                                  allowDecimals : false, // 是否允许刻度有小数
                                  title : {
                                    text : '每日使用次数',
                                    style : {
                                      'color' : 'red',// 刻度颜色
                                      'fontSize' : '16px' // 刻度字体大小
                                    }
                                  },
                                  labels : {
                                    style : {
                                      // 'color': 'red',//刻度颜色
                                      'fontSize' : '14px' // 刻度字体大小
                                    }
                                  }
                                },
                                // 标签设置
                                tooltip: {
                                  formatter: function () {  
                                      return '时间：<b>' + Highcharts.dateFormat('%H:%M', this.x) + '</b><br/>' 
                                      +'<label style="color:#7FB7ED;">● </label><b></b> ' + this.series.name + '：<b>' + this.y + '</b><br/>';  
                                  }  
                                },
                                legend : {
                                  enabled : false
                                },
                                exporting: { 
                                  enabled: true,  //设置导出按钮可用 
                                  filename:'dudu.meirishiyong',//导出的文件名，暂时不能为中文，"嘟嘟图表"dudu.chart
                                  sourceWidth:1500,//导出的文件宽度
                                  sourceHeight:600//导出的文件高度
                                },
                                plotOptions : {
                                  area : {
                                    fillColor : {
                                      linearGradient : {
                                        x1 : 0,
                                        y1 : 0,
                                        x2 : 0,
                                        y2 : 1
                                      },
                                      stops : [
                                          [ 0, Highcharts.getOptions().colors[0] ],
                                          [
                                              1,
                                              Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get(
                                                  'rgba') ] ]
                                    },
                                    marker : {
                                      radius : 2
                                    },
                                    lineWidth : 1,
                                    states : {
                                      hover : {
                                        lineWidth : 1
                                      }
                                    },
                                    threshold : null
                                  }
                                },

                                series : [ {
                                  type : 'area',
                                  name : '使用次数',
                                  pointInterval : pointIntervalCount,// 60 * 1000
//                                  pointStart : Date.UTC(strYear, strMonth, strDay),
                                  data : strCount
                                } ]

                              });

                        }
                      });
                },
                "aoColumns" : [ {
                  "sTitle" : "时间",
                  "bSortable" : false,
                  "mData" : "time",
                  "sWidth" : "18%"
                } ],
                "fnDrawCallback" : function(oSettings) {
                  // 表格绘制完成后，去除width属性，使表格可缩放
                  $('#' + oSettings.sTableId).css("width", "");
                }
              });

          // 统计图表按钮
          $('#btnchart').click(function() {
            //蒙版
            loader.loading("数据加载中，请稍后……");
            datatables.fnFilter();
            return false;
          });

          //重置查询条件
          $('#btnreset').click(function() {
            //蒙版
            loader.loading("数据加载中，请稍后……");
            $("#isvName").select2("val", "");
            $("#applyName").select2("val", "");
            $('#mydatetimepicker').datetimepicker('setDate', (new Date()));
            $("#carrierid").select2("val", "");
            $("#statisticstype").select2("val", "");
            datatables.fnFilter();
            return false;
          });

        });

  };
});
